Introduction
The COVID-19 pandemic, caused by the novel coronavirus SARS-CoV-2,
has had an unprecedented impact on global health, economies, and daily
life since its emergence in late 2019. As the world fights with the
challenges posed by this highly contagious virus, epidemiological data
have been continuously gathered and released to the public, driving
numerous researches and different approaches in trying to understand its
patterns of transmission, to identify vulnerable populations, and to
inform public health strategies. Due to the severity of the early stage
of the pandemic and its wide impact on global production, data of high
quality and accuracy were gathered in the nation through surveys and
reports, so we believed that the COVID-19 data sets could be more
informative and extensive than other epidemiology data.
In this assignment, we looked into the COVID-19 epidemiology data
sets provided by Statistics Canada along with other related data sets.
We attempted to answer three major questions in three subsections:
We wanted to find if there was a possible relationship between
the COVID pandemic and the death counts for 2020, 2021, 2022 and 2023.
Through this question, one might be able to draw insights on whether the
virus has had a dangerous impact on the overall public health.
We gathered data of COVID-19 long term symptom among Canadian
adults. We wanted to draw some conclusions on whether the virus had any
impact on the long-term health condition of Canadians.
We wanted to measure the relationship between the risk prevalence
and some factors like vaccination status, chronic conditions and having
or not a direct contact with people etc. By building a statistical model
between the response and predictors, it helped us understand what
procedures or conditions can affect the prevalence of COVID-19.
Method
Section 1:
Mortality
We used two data sets to explore the relationship between COVID-19
and the mortality in Canada. First data set is focus on the COVID-19
cases and death published by government of Canada to explore the number
of new infections and deaths numbers in Canada and updates every Monday
morning from Feb.01,2020 to Oct.28, 2023.
This data set contains 2940 observations of 23 variables,including
the total number of COVID-19 infections and deaths and their rates from
January 2020 until the end of the reporting week, weekly and bi-weekly
number of infection and deaths and their rates. Additionally, it
includes the average daily death counts and rates derived from both
weekly and bi-weekly data. In this section, our analysis emphasizes
variables that pertain to both weekly and overall data. The data
dictionary detailing the selected variables is provided below.
| Table 2.1.1: COVID-19 Cases and Death Data Dictionary |
| Variables |
Type |
Example |
Number.Unique |
PctMissing |
Comment |
| prname |
character |
British Columbia, Alberta |
15 |
0% |
English name of jurisdiction (province, territory, Canada) |
| date |
character |
2020-02-01, 2020-02-08 |
196 |
0% |
Last day of the epidemiologic week for which the data represent. Epidemiological weeks are from Sunday to Saturday and this date will always fall on a Saturday. |
| reporting_year |
integer |
2020, 2021 |
4 |
0% |
The calendar year associated with the epidemiologic week (based on the Fluwatch weeks calendar) in which the data was reported.(2020-2023) |
| totalcases |
integer |
1, 0 |
2147 |
0% |
The total number of cases reported from January 2020 until the end of the reporting week in a jurisdiction. |
| numtotal_last7 |
numeric |
1, 0 |
1407 |
9.42% |
Total number of cases during the reporting week for a jurisdiction, minus the total number of cases from that jurisdiction's previous week's update. |
| numdeaths |
integer |
0, 1 |
1430 |
0% |
The total number of deaths reported from January 2020 until the end of the reporting week in a jurisdiction. |
| numdeaths_last7 |
numeric |
0, 1 |
295 |
11.02% |
Total number of deaths for a jurisdiction, minus the total number of deaths from that jurisdiction's previous week's update. |
From the Table 2.1.1, we found that the percentage of missing value
in weekly cases and death counts are abound 10%, which is not good for
our research.
Second data set is the provisional weekly death counts, by ages and
sex from 2010 to 2023, published by Statistics Canada. This data set
record the 149730 observations of 17 variables that are relevant for
monitoring the impacts of mortality the province and territory in
Canada. We also deleted some variables which are irrelevant with our
study or can not delivered the useful information in this data set. Such
as variables like STATUS and TERMINATED are missing in all observation
in this data set and variables DECIMALS and UOM_ID are the same for all
variables. The data dictionary for remaining variables is provided
below.
In order to have better understanding about the mortality in Canada,
we visualize the weekly death counts every year form 2010 to 2023 in
Figure(), it is clear to see that the the number of annual deaths is
increasing every year. The overall trend from 2010 to 2019 is similar,
with an general decrease from the begging to the middle of the year then
followed by an upward trend until the year end. In the middle of 2020
and the beginning of 2022, there exist two significant spikes on the
figure. These pronounced increases in case counts raise the possibility
that they may be attributed to distinct outbreaks of the epidemic.
To verify this conjecture, we showed the weekly number of death
without the COVID-19 cases in Figure(). The spikes in 2020 and 2022 are
removed but the small spike in mid-2021 still exist. So death counts
rapid increase in 2020 and 2022 may caused by COVID-19 and we will
discuss the probability of COVID-19 deaths in the total number of death
condition on year in the following section.
Section 2: Long-term
Impact
Section 3: Prevalence
Modeling
Result
Section 1:
Mortality
In order to discuss the probability of COVID-19 death in the total
death, we first calculated the proportion for the COVID-19 death from
2020 to 2023 in Table 3.1.1. To our surprise, the proportion in 2022 is
the higher than the proportion in 2020, 0.0574 and 0.0490 respectively.
This might because the outbreak of the new variant Omicron. The
proportion in 2021 and 2023 are relatively low might because the
population of vaccination increase.
To test the homogeneity for COVID-19 death probability condition on
years, we can use the Chi-square test and the null and alternative
hypothesis of homogeneity corresponding to:
\[\begin{gather*}
H_0:P_{j|i}\ =\ P_{·j}\\
H_1:P_{j|i}\neq P_{·j}
\end{gather*}\]
The Chi-squares statistics computed by Chi-squared test and
Likelihood ratio test is different but the p-value is less than 0.05 in
both test. Thus we reject the null hypothesis under the 0.05 level since
there have strong evidence that exist significant difference in
probability in COVID-19 death probability condition on years.
Then we can compute the relative risk and odds ratio for years to
measure the association between years and COVID-19 death proportion. We
chose the COVID-19 death proportion in 2020 year as baseline category
and compute the relative risks and odds ratios.
Table 3.1.4 showed the Relative risks in 2021,2022 and 2023. We can
see that relative risks in 2021,and 2023 are less than 1, we can
concluded that if a people died in COVID-19, this people is more likely
died in 2020 than 2021 and 2023. The relative risk in 2022 are greater
than 1, we can concluded that if a people died in COVID-19, this people
is more likely died in 2022 than 2020.
From Table 3.1.5, we can see that the odds ratios for all three years
are not equal to 1, which indicated that there exists association
between year and COVID-19 death proportion. For odds ratios in 2021 and
2023, there exist positive association between probability of death
caused by COVID-19. The association in 2022 is negative between
proportion of COVID-19 death in total death.
Section 2: Long-term
Impact
Section 3: Prevalence
Modeling
Discussion
Section 1:
Mortality
Section 2: Long-term
Impact
Section 3: Prevalence
Modeling
Conclusion
References
LS0tCnRpdGxlOiAiTUFUNTMxNyBDYXRlZ29yaWNhbCBBc3NpZ25tZW50IDIiCmF1dGhvcjoKLSBUZW5nIExpKDczNzMwODYpCi0gWmhpemUgTHUoMzAwMDc1MTE0KQotIENodXRvbmcgWmhhbmcoMzAwMzExMzI1KQpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgdG9jOiB5ZXMKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICBmaWdfY2FwdGlvbjogeWVzCmhlYWRlci1pbmNsdWRlczoKLSBccmVuZXdjb21tYW5ke1xhbmR9e1xcfQotIFx1c2VwYWNrYWdle2Zsb2F0fQotIFxmbG9hdHBsYWNlbWVudHtmaWd1cmV9e0h9CmJpYmxpb2dyYXBoeTogUmVmZXJlbmNlcy5iaWIKbGluay1jaXRhdGlvbnM6IHllcwotLS0KCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+Ci50aXRsZSwgLmF1dGhvcnt0ZXh0LWFsaWduOiBjZW50ZXI7fQpib2R5e2ZvbnQtc2l6ZTogMTJwdDt9CnRhYmxle2ZvbnQtc2l6ZTogMTJwdDt9Cmgxe2ZvbnQtc2l6ZTogMTRwdDt9Cmgye2ZvbnQtc2l6ZTogMTJwdDt9Cjwvc3R5bGU+CgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShEZXNjVG9vbHMpCmxpYnJhcnkoZ3QpCmxpYnJhcnkoc3RhcmdhemVyKQpgYGAKCmBgYHtyfQpDQ0FIUzwtcmVhZC5jc3YoIkNDQUhTLmNzdiIsIGhlYWRlciA9IFRSVUUpCkNvdmlkPC1yZWFkLmNzdigiQ292aWQuY3N2IiwgaGVhZGVyID0gVFJVRSkKV01vcnRhbGl0eTwtcmVhZC5jc3YoIldlZWtseU1vcnRhbGl0eS5jc3YiLCBoZWFkZXIgPSBUUlVFKQpFeE1vcnRhbGl0eTwtcmVhZC5jc3YoIkV4Y2Vzc01vcnRhbGl0eS5jc3YiLCBoZWFkZXIgPSBUUlVFKQpMb25nVGVybTwtcmVhZC5jc3YoIkxvbmdUZXJtLmNzdiIsIGhlYWRlciA9IFRSVUUpCmBgYAoKIyBJbnRyb2R1Y3Rpb24KClRoZSBDT1ZJRC0xOSBwYW5kZW1pYywgY2F1c2VkIGJ5IHRoZSBub3ZlbCBjb3JvbmF2aXJ1cyBTQVJTLUNvVi0yLCBoYXMgaGFkIGFuIHVucHJlY2VkZW50ZWQgaW1wYWN0IG9uIGdsb2JhbCBoZWFsdGgsIGVjb25vbWllcywgYW5kIGRhaWx5IGxpZmUgc2luY2UgaXRzIGVtZXJnZW5jZSBpbiBsYXRlIDIwMTkuIEFzIHRoZSB3b3JsZCBmaWdodHMgd2l0aCB0aGUgY2hhbGxlbmdlcyBwb3NlZCBieSB0aGlzIGhpZ2hseSBjb250YWdpb3VzIHZpcnVzLCBlcGlkZW1pb2xvZ2ljYWwgZGF0YSBoYXZlIGJlZW4gY29udGludW91c2x5IGdhdGhlcmVkIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljLCBkcml2aW5nIG51bWVyb3VzIHJlc2VhcmNoZXMgYW5kIGRpZmZlcmVudCBhcHByb2FjaGVzIGluIHRyeWluZyB0byB1bmRlcnN0YW5kIGl0cyBwYXR0ZXJucyBvZiB0cmFuc21pc3Npb24sIHRvIGlkZW50aWZ5IHZ1bG5lcmFibGUgcG9wdWxhdGlvbnMsIGFuZCB0byBpbmZvcm0gcHVibGljIGhlYWx0aCBzdHJhdGVnaWVzLiBEdWUgdG8gdGhlIHNldmVyaXR5IG9mIHRoZSBlYXJseSBzdGFnZSBvZiB0aGUgcGFuZGVtaWMgYW5kIGl0cyB3aWRlIGltcGFjdCBvbiBnbG9iYWwgcHJvZHVjdGlvbiwgZGF0YSBvZiBoaWdoIHF1YWxpdHkgYW5kIGFjY3VyYWN5IHdlcmUgZ2F0aGVyZWQgaW4gdGhlIG5hdGlvbiB0aHJvdWdoIHN1cnZleXMgYW5kIHJlcG9ydHMsIHNvIHdlIGJlbGlldmVkIHRoYXQgdGhlIENPVklELTE5IGRhdGEgc2V0cyBjb3VsZCBiZSBtb3JlIGluZm9ybWF0aXZlIGFuZCBleHRlbnNpdmUgdGhhbiBvdGhlciBlcGlkZW1pb2xvZ3kgZGF0YS4KCkluIHRoaXMgYXNzaWdubWVudCwgd2UgbG9va2VkIGludG8gdGhlIENPVklELTE5IGVwaWRlbWlvbG9neSBkYXRhIHNldHMgcHJvdmlkZWQgYnkgU3RhdGlzdGljcyBDYW5hZGEgYWxvbmcgd2l0aCBvdGhlciByZWxhdGVkIGRhdGEgc2V0cy4gV2UgYXR0ZW1wdGVkIHRvIGFuc3dlciB0aHJlZSBtYWpvciBxdWVzdGlvbnMgaW4gdGhyZWUgc3Vic2VjdGlvbnM6CgoxLiBXZSB3YW50ZWQgdG8gZmluZCBpZiB0aGVyZSB3YXMgYSBwb3NzaWJsZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgQ09WSUQgcGFuZGVtaWMgYW5kIHRoZSBkZWF0aCBjb3VudHMgZm9yIDIwMjAsIDIwMjEsIDIwMjIgYW5kIDIwMjMuIFRocm91Z2ggdGhpcyBxdWVzdGlvbiwgb25lIG1pZ2h0IGJlIGFibGUgdG8gZHJhdyBpbnNpZ2h0cyBvbiB3aGV0aGVyIHRoZSB2aXJ1cyBoYXMgaGFkIGEgZGFuZ2Vyb3VzIGltcGFjdCBvbiB0aGUgb3ZlcmFsbCBwdWJsaWMgaGVhbHRoLgoKMi4gV2UgZ2F0aGVyZWQgZGF0YSBvZiBDT1ZJRC0xOSBsb25nIHRlcm0gc3ltcHRvbSBhbW9uZyBDYW5hZGlhbiBhZHVsdHMuIFdlIHdhbnRlZCB0byBkcmF3IHNvbWUgY29uY2x1c2lvbnMgb24gd2hldGhlciB0aGUgdmlydXMgaGFkIGFueSBpbXBhY3Qgb24gdGhlIGxvbmctdGVybSBoZWFsdGggY29uZGl0aW9uIG9mIENhbmFkaWFucy4KCjMuIFdlIHdhbnRlZCB0byBtZWFzdXJlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcmlzayBwcmV2YWxlbmNlIGFuZCBzb21lIGZhY3RvcnMgbGlrZSB2YWNjaW5hdGlvbiBzdGF0dXMsIGNocm9uaWMgY29uZGl0aW9ucyBhbmQgaGF2aW5nIG9yIG5vdCBhIGRpcmVjdCBjb250YWN0IHdpdGggcGVvcGxlIGV0Yy4gQnkgYnVpbGRpbmcgYSBzdGF0aXN0aWNhbCBtb2RlbCBiZXR3ZWVuIHRoZSByZXNwb25zZSBhbmQgcHJlZGljdG9ycywgaXQgaGVscGVkIHVzIHVuZGVyc3RhbmQgd2hhdCBwcm9jZWR1cmVzIG9yIGNvbmRpdGlvbnMgY2FuIGFmZmVjdCB0aGUgcHJldmFsZW5jZSBvZiBDT1ZJRC0xOS4gIAoKIyBNZXRob2QKCiMjIFNlY3Rpb24gMTogTW9ydGFsaXR5CldlIHVzZWQgdHdvIGRhdGEgc2V0cyB0byBleHBsb3JlIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBDT1ZJRC0xOSBhbmQgdGhlIG1vcnRhbGl0eSBpbiBDYW5hZGEuIEZpcnN0IGRhdGEgc2V0IGlzIGZvY3VzIG9uIHRoZSBDT1ZJRC0xOSBjYXNlcyBhbmQgZGVhdGggcHVibGlzaGVkIGJ5IGdvdmVybm1lbnQgb2YgQ2FuYWRhIHRvIGV4cGxvcmUgdGhlIG51bWJlciBvZiBuZXcgaW5mZWN0aW9ucyBhbmQgZGVhdGhzIG51bWJlcnMgaW4gQ2FuYWRhIGFuZCB1cGRhdGVzIGV2ZXJ5IE1vbmRheSBtb3JuaW5nIGZyb20gRmViLjAx77yMMjAyMCB0byBPY3QuMjgsIDIwMjMuIAoKVGhpcyBkYXRhIHNldCBjb250YWlucyAyOTQwIG9ic2VydmF0aW9ucyBvZiAyMyB2YXJpYWJsZXMsaW5jbHVkaW5nIHRoZSB0b3RhbCBudW1iZXIgb2YgQ09WSUQtMTkgaW5mZWN0aW9ucyBhbmQgZGVhdGhzIGFuZCB0aGVpciByYXRlcyBmcm9tIEphbnVhcnkgMjAyMCB1bnRpbCB0aGUgZW5kIG9mIHRoZSByZXBvcnRpbmcgd2Vlaywgd2Vla2x5IGFuZCBiaS13ZWVrbHkgbnVtYmVyIG9mIGluZmVjdGlvbiBhbmQgZGVhdGhzIGFuZCB0aGVpciByYXRlcy4gQWRkaXRpb25hbGx5LCBpdCBpbmNsdWRlcyB0aGUgYXZlcmFnZSBkYWlseSBkZWF0aCBjb3VudHMgYW5kIHJhdGVzIGRlcml2ZWQgZnJvbSBib3RoIHdlZWtseSBhbmQgYmktd2Vla2x5IGRhdGEuIEluIHRoaXMgc2VjdGlvbiwgb3VyIGFuYWx5c2lzIGVtcGhhc2l6ZXMgdmFyaWFibGVzIHRoYXQgcGVydGFpbiB0byBib3RoIHdlZWtseSBhbmQgb3ZlcmFsbCBkYXRhLiBUaGUgZGF0YSBkaWN0aW9uYXJ5IGRldGFpbGluZyB0aGUgc2VsZWN0ZWQgdmFyaWFibGVzIGlzIHByb3ZpZGVkIGJlbG93LgpgYGB7cn0KI2RhdGEgZGljdGlvbmFyeTpDb3ZpZCBjYXNlcyBhbmQgZGVhdGgKQ09WSUQ8LUNvdmlkJT4lCiAgc2VsZWN0KHBybmFtZSxkYXRlLHJlcG9ydGluZ195ZWFyLHRvdGFsY2FzZXMsbnVtdG90YWxfbGFzdDcsbnVtZGVhdGhzLG51bWRlYXRoc19sYXN0NykKCkNvdmlkREQ8LWRhdGEuZnJhbWUoCiAgVmFyaWFibGVzPWNvbG5hbWVzKENPVklEKSwgICAKICBUeXBlPXNhcHBseShDT1ZJRCwgZnVuY3Rpb24oeCkgY2xhc3MoeCkpLAogIEV4YW1wbGU9c2FwcGx5KENPVklELCBmdW5jdGlvbih4KSBwYXN0ZShhcy5jaGFyYWN0ZXIoaGVhZCh1bmlxdWUoeCksMikpLCBjb2xsYXBzZSA9ICIsICIpKSwKICBOdW1iZXIuVW5pcXVlPXNhcHBseShDT1ZJRCwgZnVuY3Rpb24oeCkgbGVuZ3RoKHVuaXF1ZSh4KSkpLAogIFBjdE1pc3Npbmc9c2FwcGx5KENPVklELCBmdW5jdGlvbih4KSBwYXN0ZTAocm91bmQoc3VtKGlzLm5hKHgpKS9sZW5ndGgoeCksIDQpKjEwMCwiJSIpKSwKICBDb21tZW50PWMoICJFbmdsaXNoIG5hbWUgb2YganVyaXNkaWN0aW9uIChwcm92aW5jZSwgdGVycml0b3J5LCBDYW5hZGEpIiwKICAgICAgICAgICAgICAiTGFzdCBkYXkgb2YgdGhlIGVwaWRlbWlvbG9naWMgd2VlayBmb3Igd2hpY2ggdGhlIGRhdGEgcmVwcmVzZW50LiBFcGlkZW1pb2xvZ2ljYWwgd2Vla3MgYXJlIGZyb20gU3VuZGF5IHRvIFNhdHVyZGF5IGFuZCB0aGlzIGRhdGUgd2lsbCBhbHdheXMgZmFsbCBvbiBhIFNhdHVyZGF5LiIsCiAgICAgICAgICAgICAiVGhlIGNhbGVuZGFyIHllYXIgYXNzb2NpYXRlZCB3aXRoIHRoZSBlcGlkZW1pb2xvZ2ljIHdlZWsgKGJhc2VkIG9uIHRoZSBGbHV3YXRjaCB3ZWVrcyBjYWxlbmRhcikgaW4gd2hpY2ggdGhlIGRhdGEgd2FzIHJlcG9ydGVkLigyMDIwLTIwMjMpIiwKICAgICAgICAgICAgICAiVGhlIHRvdGFsIG51bWJlciBvZiBjYXNlcyByZXBvcnRlZCBmcm9tIEphbnVhcnkgMjAyMCB1bnRpbCB0aGUgZW5kIG9mIHRoZSByZXBvcnRpbmcgd2VlayBpbiBhIGp1cmlzZGljdGlvbi4iLAogICAgICAgICAgICAgIlRvdGFsIG51bWJlciBvZiBjYXNlcyBkdXJpbmcgdGhlIHJlcG9ydGluZyB3ZWVrIGZvciBhIGp1cmlzZGljdGlvbiwgbWludXMgdGhlIHRvdGFsIG51bWJlciBvZiBjYXNlcyBmcm9tIHRoYXQganVyaXNkaWN0aW9uJ3MgcHJldmlvdXMgd2VlaydzIHVwZGF0ZS4iLAogICAgICAgICAgICAgIlRoZSB0b3RhbCBudW1iZXIgb2YgZGVhdGhzIHJlcG9ydGVkIGZyb20gSmFudWFyeSAyMDIwIHVudGlsIHRoZSBlbmQgb2YgdGhlIHJlcG9ydGluZyB3ZWVrIGluIGEganVyaXNkaWN0aW9uLiIsCiAgICAgICAgICAgICAiVG90YWwgbnVtYmVyIG9mIGRlYXRocyBmb3IgYSBqdXJpc2RpY3Rpb24sIG1pbnVzIHRoZSB0b3RhbCBudW1iZXIgb2YgZGVhdGhzIGZyb20gdGhhdCBqdXJpc2RpY3Rpb24ncyBwcmV2aW91cyB3ZWVrJ3MgdXBkYXRlLiIKICAgICAgICAgICAgIAogICAgICAgICAgICkKKQpDb3ZpZEREJT4lCiAgZ3QoKSU+JXRhYl9oZWFkZXIoCiAgICB0aXRsZSA9ICJUYWJsZSAyLjEuMTogQ09WSUQtMTkgQ2FzZXMgYW5kIERlYXRoIERhdGEgRGljdGlvbmFyeSIpCgpgYGAKRnJvbSB0aGUgVGFibGUgMi4xLjEsIHdlIGZvdW5kIHRoYXQgdGhlIHBlcmNlbnRhZ2Ugb2YgbWlzc2luZyB2YWx1ZSBpbiB3ZWVrbHkgY2FzZXMgYW5kIGRlYXRoIGNvdW50cyBhcmUgYWJvdW5kIDEwJSwgd2hpY2ggaXMgbm90IGdvb2QgZm9yIG91ciByZXNlYXJjaC4gCgpTZWNvbmQgZGF0YSBzZXQgaXMgdGhlIHByb3Zpc2lvbmFsIHdlZWtseSBkZWF0aCBjb3VudHMsIGJ5IGFnZXMgYW5kIHNleCBmcm9tIDIwMTAgdG8gMjAyMywgcHVibGlzaGVkIGJ5IFN0YXRpc3RpY3MgQ2FuYWRhLiBUaGlzIGRhdGEgc2V0IHJlY29yZCB0aGUgMTQ5NzMwIG9ic2VydmF0aW9ucyBvZiAxNyB2YXJpYWJsZXMgdGhhdCBhcmUgcmVsZXZhbnQgZm9yIG1vbml0b3JpbmcgdGhlIGltcGFjdHMgb2YgIG1vcnRhbGl0eSB0aGUgcHJvdmluY2UgYW5kIHRlcnJpdG9yeSBpbiBDYW5hZGEuIFdlIGFsc28gZGVsZXRlZCBzb21lIHZhcmlhYmxlcyB3aGljaCBhcmUgaXJyZWxldmFudCB3aXRoIG91ciBzdHVkeSBvciBjYW4gbm90IGRlbGl2ZXJlZCB0aGUgdXNlZnVsIGluZm9ybWF0aW9uIGluIHRoaXMgZGF0YSBzZXQuIFN1Y2ggYXMgdmFyaWFibGVzIGxpa2UgU1RBVFVTIGFuZCBURVJNSU5BVEVEIGFyZSBtaXNzaW5nIGluIGFsbCBvYnNlcnZhdGlvbiBpbiB0aGlzIGRhdGEgc2V0IGFuZCB2YXJpYWJsZXMgREVDSU1BTFMgYW5kIFVPTV9JRCBhcmUgdGhlIHNhbWUgZm9yIGFsbCB2YXJpYWJsZXMuIFRoZSBkYXRhIGRpY3Rpb25hcnkgZm9yIHJlbWFpbmluZyB2YXJpYWJsZXMgaXMgcHJvdmlkZWQgYmVsb3cuCmBgYHtyfQojZGF0YSBkaWN0aW9uYXJ5OldlZWtseSBtb3J0YWxpdHkKbW9ydGFsaXR5PC1XTW9ydGFsaXR5JT4lCiAgc2VsZWN0KFJFRl9EQVRFLEdFTyxBZ2UuYXQudGltZS5vZi5kZWF0aCxTZXgsQ2hhcmFjdGVyaXN0aWNzLFVPTSxWQUxVRSkKZGF0YS5mcmFtZSgKICBWYXJpYWJsZXM9Y29sbmFtZXMobW9ydGFsaXR5KSwgICAKICBUeXBlPXNhcHBseShtb3J0YWxpdHksIGZ1bmN0aW9uKHgpIGNsYXNzKHgpKSwKICBFeGFtcGxlPXNhcHBseShtb3J0YWxpdHksIGZ1bmN0aW9uKHgpIHBhc3RlKGFzLmNoYXJhY3RlcihoZWFkKHVuaXF1ZSh4KSwyKSksIGNvbGxhcHNlID0gIiwgIikpLAogIE51bWJlci5VbmlxdWU9c2FwcGx5KG1vcnRhbGl0eSwgZnVuY3Rpb24oeCkgbGVuZ3RoKHVuaXF1ZSh4KSkpLAogIFBjdE1pc3Npbmc9c2FwcGx5KG1vcnRhbGl0eSwgZnVuY3Rpb24oeCkgcGFzdGUwKHJvdW5kKHN1bShpcy5uYSh4KSkvbGVuZ3RoKHgpLCA0KSoxMDAsIiUiKSksCiAgQ29tbWVudD1jKCJSZWZlcmVuY2UgcGVyaW9kIGZvciB0aGUgc2VyaWVzIGJlaW5nIHJlbGVhc2VkLigyMDEwLTIwMjMpIiwKICAgICAgICAgICAgICJOYW1lIG9mIGRpbWVuc2lvbi4gVGhlcmUgY2FuIGJlIHVwIHRvIDEwIGRpbWVuc2lvbnMgaW4gYSBkYXRhIHRhYmxlLgooaS5lLiBHZW9ncmFwaHkpIiwKICAgICAgICAgICAgICJBZ2UgZ3JvdW8gd2hlbiBkZWF0aCBvY2N1cnJlZCIsCiAgICAgICAgICAgICAiU2V4ICIsCiAgICAgICAgICAgICAiTnVtYmVyIG9mIGRlYXRocyIsCiAgICAgICAgICAgICAiVGhlIHVuaXQgb2YgbWVhc3VyZSBhcHBsaWVkIHRvIGEgbWVtYmVyIGdpdmVuIGluIHRleHQuIiwKICAgICAgICAgICAgICJUb3RhbCBudW1iZXIgb2YgZGVhdGggdW5kZXIgY2VydGFpbiBjaGFyYWN0ZXJpc3RpY3MiCiAgICAgICAgICAgKQopJT4lZ3QoKSU+JXRhYl9oZWFkZXIoCiAgICB0aXRsZSA9ICJUYWJsZSAyLjEuMjogV2Vla2x5IE1vcnRhbGl0eSBEYXRhIERpY3Rpb25hcnkiKQoKCmBgYApJbiBvcmRlciB0byBoYXZlIGJldHRlciB1bmRlcnN0YW5kaW5nIGFib3V0IHRoZSBtb3J0YWxpdHkgaW4gQ2FuYWRhLCB3ZSB2aXN1YWxpemUgdGhlIHdlZWtseSBkZWF0aCBjb3VudHMgZXZlcnkgeWVhciBmb3JtIDIwMTAgdG8gMjAyMyBpbiBGaWd1cmUoKSwgaXQgaXMgY2xlYXIgdG8gc2VlIHRoYXQgdGhlICB0aGUgbnVtYmVyIG9mIGFubnVhbCBkZWF0aHMgaXMgaW5jcmVhc2luZyBldmVyeSB5ZWFyLiBUaGUgb3ZlcmFsbCB0cmVuZCBmcm9tIDIwMTAgdG8gMjAxOSBpcyBzaW1pbGFyLCB3aXRoIGFuIGdlbmVyYWwgIGRlY3JlYXNlIGZyb20gdGhlIGJlZ2dpbmcgdG8gdGhlIG1pZGRsZSBvZiB0aGUgeWVhciB0aGVuIGZvbGxvd2VkIGJ5IGFuIHVwd2FyZCB0cmVuZCB1bnRpbCB0aGUgeWVhciBlbmQuIEluIHRoZSBtaWRkbGUgb2YgMjAyMCBhbmQgdGhlIGJlZ2lubmluZyBvZiAyMDIyLCB0aGVyZSBleGlzdCB0d28gc2lnbmlmaWNhbnQgc3Bpa2VzIG9uIHRoZSBmaWd1cmUuIFRoZXNlIHByb25vdW5jZWQgaW5jcmVhc2VzIGluIGNhc2UgY291bnRzIHJhaXNlIHRoZSBwb3NzaWJpbGl0eSB0aGF0IHRoZXkgbWF5IGJlIGF0dHJpYnV0ZWQgdG8gZGlzdGluY3Qgb3V0YnJlYWtzIG9mIHRoZSBlcGlkZW1pYy4gCgpUbyB2ZXJpZnkgdGhpcyBjb25qZWN0dXJlLCB3ZSBzaG93ZWQgdGhlIHdlZWtseSBudW1iZXIgb2YgZGVhdGggd2l0aG91dCB0aGUgQ09WSUQtMTkgY2FzZXMgaW4gRmlndXJlKCkuIFRoZSBzcGlrZXMgaW4gMjAyMCBhbmQgMjAyMiBhcmUgcmVtb3ZlZCBidXQgdGhlIHNtYWxsIHNwaWtlIGluIG1pZC0yMDIxIHN0aWxsIGV4aXN0LiBTbyBkZWF0aCBjb3VudHMgcmFwaWQgaW5jcmVhc2UgaW4gMjAyMCBhbmQgMjAyMiBtYXkgY2F1c2VkIGJ5IENPVklELTE5IGFuZCB3ZSB3aWxsIGRpc2N1c3MgdGhlIHByb2JhYmlsaXR5IG9mICBDT1ZJRC0xOSBkZWF0aHMgaW4gdGhlIHRvdGFsIG51bWJlciBvZiBkZWF0aCBjb25kaXRpb24gb24geWVhciBpbiB0aGUgZm9sbG93aW5nIHNlY3Rpb24uCmBgYHtyfQojdml6dWFsaXplIHRoZSBkZWF0aCB3aXRoIGFuZCB3aXRob3V0IGNvdmlkCldNb3J0YWxpdHklPiUKICBtdXRhdGUoWWVhcj15ZWFyKFJFRl9EQVRFKSxXZWVrPXN1YnN0cihSRUZfREFURSw2LDEwKSklPiUKICBtdXRhdGUoWWVhcj1mYWN0b3IoWWVhcikpJT4lCiAgZmlsdGVyKEFnZS5hdC50aW1lLm9mLmRlYXRoPT0iQWdlIGF0IHRpbWUgb2YgZGVhdGgsIGFsbCBhZ2VzIiAmIFNleD09IkJvdGggc2V4ZXMiICYgR0VPPT0iQ2FuYWRhLCBwbGFjZSBvZiBvY2N1cnJlbmNlIiklPiUKICBwbG90X2x5KHg9fldlZWssIHk9flZBTFVFLCBjb2xvcj1+WWVhcix0eXBlID0gInNjYXR0ZXIiLCBtb2RlPSJsaW5lcyIpJT4lCiAgbGF5b3V0KHdpZHRoID0gMTAwMCwgaGVpZ2h0ID0gNTAwLHRpdGxlID0gJ0ZpZ3VyZTIuMS4xOldlZWtseSBEZWF0aCBDb3VudHMnLCB5YXhpcyA9IGxpc3QodGl0bGUgPSAiTnVtYmVyIG9mIERlYXRoIikpCmBgYAoKCmBgYHtyfQpXaXRob3V0YzwtV01vcnRhbGl0eSU+JQogIG11dGF0ZShZZWFyPXllYXIoUkVGX0RBVEUpLFdlZWs9c3Vic3RyKFJFRl9EQVRFLDYsMTApKSU+JQogIGZpbHRlcihBZ2UuYXQudGltZS5vZi5kZWF0aD09IkFnZSBhdCB0aW1lIG9mIGRlYXRoLCBhbGwgYWdlcyIgJiBTZXg9PSJCb3RoIHNleGVzIiAmIEdFTz09IkNhbmFkYSwgcGxhY2Ugb2Ygb2NjdXJyZW5jZSIsWWVhcj49IjIwMjAiKSU+JQogIHNlbGVjdChSRUZfREFURSxZZWFyLCBXZWVrLCBHRU8sQ2hhcmFjdGVyaXN0aWNzLFZBTFVFKSU+JQogIG5hLm9taXQoKQogV2l0aG91dGM8LVdpdGhvdXRjWy1jKDE6NCksXQpDTzwtQ292aWQlPiUKICBmaWx0ZXIocHJuYW1lPT0iQ2FuYWRhIiklPiUKICBzZWxlY3QoZGF0ZSxudW1kZWF0aHNfbGFzdDcpCiAgY29sbmFtZXMoQ08pWzFdIDwtICJSRUZfREFURSIKCldPTW9ydGFsaXR5PC1XTW9ydGFsaXR5JT4lCiAgbXV0YXRlKFllYXI9eWVhcihSRUZfREFURSksV2Vlaz1zdWJzdHIoUkVGX0RBVEUsNiwxMCkpJT4lCiAgZmlsdGVyKEFnZS5hdC50aW1lLm9mLmRlYXRoPT0iQWdlIGF0IHRpbWUgb2YgZGVhdGgsIGFsbCBhZ2VzIiAmIFNleD09IkJvdGggc2V4ZXMiICYgR0VPPT0iQ2FuYWRhLCBwbGFjZSBvZiBvY2N1cnJlbmNlIiklPiUKICBzZWxlY3QoUkVGX0RBVEUsWWVhciwgV2VlaywgR0VPLENoYXJhY3RlcmlzdGljcyxWQUxVRSkKIFdPTW9ydGFsaXR5PC0gbWVyZ2UoV09Nb3J0YWxpdHksQ08sYnk9IlJFRl9EQVRFIixhbGw9VFJVRSkKIFdPTW9ydGFsaXR5PC0gV09Nb3J0YWxpdHlbLWMoNzA3OjcyMSksXQogV09Nb3J0YWxpdHkkbnVtZGVhdGhzX2xhc3Q3W2lzLm5hKCBXT01vcnRhbGl0eSRudW1kZWF0aHNfbGFzdDcpXSA9IDAKV09Nb3J0YWxpdHklPiUKICBtdXRhdGUoRGVhdGhfd2l0aG91dF9jb3ZpZD1WQUxVRS1udW1kZWF0aHNfbGFzdDcpJT4lCiAgcGxvdF9seSggeD1+V2VlaywgeT1+RGVhdGhfd2l0aG91dF9jb3ZpZCwgY29sb3I9fmZhY3RvcihZZWFyKSx0eXBlID0gInNjYXR0ZXIiLCBtb2RlPSJsaW5lcyIpJT4lCmxheW91dCh3aWR0aCA9IDkwMCwgaGVpZ2h0ID0gNTAwLCB0aXRsZSA9ICdGaWd1cmUyLjEuMjpXZWVrbHkgRGVhdGggQ291bnRzIHdpdGhvdXQgQ09JVkQgY2FzZXMnLHlheGlzID0gbGlzdCh0aXRsZSA9ICJOdW1iZXIgb2YgRGVhdGggd2l0aG91dCBDT1ZJRCIpKQpgYGAKCiMjIFNlY3Rpb24gMjogTG9uZy10ZXJtIEltcGFjdAoKIyMgU2VjdGlvbiAzOiBQcmV2YWxlbmNlIE1vZGVsaW5nCgojIFJlc3VsdAoKIyMgU2VjdGlvbiAxOiBNb3J0YWxpdHkKSW4gb3JkZXIgdG8gZGlzY3VzcyB0aGUgcHJvYmFiaWxpdHkgb2YgQ09WSUQtMTkgZGVhdGggaW4gdGhlIHRvdGFsIGRlYXRoLCB3ZSBmaXJzdCBjYWxjdWxhdGVkIHRoZSBwcm9wb3J0aW9uIGZvciB0aGUgQ09WSUQtMTkgZGVhdGggZnJvbSAyMDIwIHRvIDIwMjMgaW4gVGFibGUgMy4xLjEuIFRvIG91ciBzdXJwcmlzZSwgdGhlIHByb3BvcnRpb24gaW4gMjAyMiBpcyB0aGUgaGlnaGVyIHRoYW4gdGhlIHByb3BvcnRpb24gaW4gMjAyMCwgMC4wNTc0IGFuZCAwLjA0OTAgcmVzcGVjdGl2ZWx5LiBUaGlzIG1pZ2h0IGJlY2F1c2UgdGhlIG91dGJyZWFrIG9mIHRoZSBuZXcgdmFyaWFudCBPbWljcm9uLiBUaGUgcHJvcG9ydGlvbiBpbiAyMDIxIGFuZCAyMDIzIGFyZSByZWxhdGl2ZWx5IGxvdyBtaWdodCBiZWNhdXNlIHRoZSBwb3B1bGF0aW9uIG9mIHZhY2NpbmF0aW9uIGluY3JlYXNlLgpgYGB7cn0KI0NvbnRpbmdlbmN5IHRhYmxlIGZvciBtb3J0YWxpdHkgcmF0ZSBWUyB5ZWFyKE9kZHMgUmF0aW8pCnRkZWF0aDwtV09Nb3J0YWxpdHklPiUKICBmaWx0ZXIoIFllYXI+PSIyMDIwIiklPiUKICBncm91cF9ieShZZWFyKSU+JQogIHN1bW1hcmlzZShUb3RhbERlYXRoPXN1bShWQUxVRSksVG90YWxjb3ZpZGRlYXRoPXN1bShudW1kZWF0aHNfbGFzdDcpLCBDRHJhdGU9VG90YWxjb3ZpZGRlYXRoL1RvdGFsRGVhdGgpClk9cm91bmQodGRlYXRoJENEcmF0ZSw0KQp0Ymw8LWRhdGEuZnJhbWUoY2JpbmQoYygyMDIwLDIwMjEsMjAyMiwyMDIzKSxZLDEtWSkpCmNvbG5hbWVzKHRibCk8LWMoIlllYXIiLCJDb3ZpZCBEZWF0aCIsICJOb3QgQ292aWQgRGVhdGgiKQp0YmwlPiVndCgpJT4ldGFiX2hlYWRlcigKICAgIHRpdGxlID0gIlRhYmxlIDMuMS4xOiBDb250aW5nZW5jeSB0YWJsZSBmb3IgcHJvcG9ydGlvbiBvZiBDT1ZJRC0xOSBkZWF0aCIpCmBgYApUbyB0ZXN0IHRoZSBob21vZ2VuZWl0eSBmb3IgQ09WSUQtMTkgZGVhdGggcHJvYmFiaWxpdHkgY29uZGl0aW9uIG9uIHllYXJzLCB3ZSBjYW4gdXNlIHRoZSBDaGktc3F1YXJlIHRlc3QgYW5kIHRoZSBudWxsIGFuZCBhbHRlcm5hdGl2ZSBoeXBvdGhlc2lzIG9mIGhvbW9nZW5laXR5IGNvcnJlc3BvbmRpbmcgdG86CgpcYmVnaW57Z2F0aGVyKn0KSF8wOlBfe2p8aX1cID1cIFBfe8K3an1cXApIXzE6UF97anxpfVxuZXEgUF97wrdqfQpcZW5ke2dhdGhlcip9CgpgYGB7cn0KIyB0YWJsZShjaGktc3F1YXJlKSB0ZXN0IGhvbW9nZW5laXR5IApZQz10ZGVhdGgkVG90YWxjb3ZpZGRlYXRoCk5DPXRkZWF0aCRUb3RhbERlYXRoLXRkZWF0aCRUb3RhbGNvdmlkZGVhdGgKbnRibDwtZGF0YS5mcmFtZShjYmluZChZQyxOQykpCmNvbG5hbWVzKG50YmwpPC1jKCJDb3ZpZCIsICJOb3QgQ292aWQiKQpudGJscz0gY2JpbmQoYygiMjAyMCIsIjIwMjEiLCIyMDIyIiwiMjAyMyIpLG50YmwpCiAgY29sbmFtZXMobnRibHMpPC1jKCJZZWFyIiwiQ292aWQiLCAiTm90IENvdmlkIikKbnRibHMlPiUKICBndCgpJT4ldGFiX2hlYWRlcigKICAgIHRpdGxlID0gIlRhYmxlIDMuMS4yOiBDb250aW5nZW5jeSB0YWJsZSBmb3IgZGVhdGggY291bnRzIikKY2hpX3NxdWFyZTwtYyhjaGlzcS50ZXN0KG50YmwpJHN0YXRpc3RpYyAsR1Rlc3QobnRibCkkc3RhdGlzdGljKQpwX3ZhbHVlPC1jKGNoaXNxLnRlc3QobnRibCkkcC52YWx1ZSxHVGVzdChudGJsKSRwLnZhbHVlKQp0ZXN0PC1jKCJDaGktc3F1YXRlZCB0ZXN0IiwiTGlrZWxpaG9vZCByYXRpbyB0ZXN0IikKICBDaGk8LWRhdGEuZnJhbWUodGVzdCxjaGlfc3F1YXJlLHBfdmFsdWUpCnNpZ25pZmljYW5jZV9sZXZlbCA8LSAwLjA1CkNoaSU+JQogICBndCgpICU+JQogIHRhYl9oZWFkZXIoCiAgICB0aXRsZSA9ICJUYWJsZTMuMS4zOlJlc3VsdCBmb3IgdGVzdCBob21vZ2VuZWl0eSBiZXR3ZWVuIENPVklELTE5IGRlYXRoIGFuZCBZZWFyIgogICkgJT4lCiAgIGNvbHNfbGFiZWwoCiAgIGNoaV9zcXVhcmUgPSAiQ2hpLVNxdWFyZWQgU3RhdGlzdGljIiwKICAgIHBfdmFsdWUgPSAiUC1WYWx1ZSIsCiAgICB0ZXN0PSJUZXN0IgogICkgJT4lCiAgZm10KAogICAgY29sdW1ucyA9IHZhcnMocF92YWx1ZSksCiAgICBmbnMgPSBmdW5jdGlvbih4KSB7CiAgICAgIGlmZWxzZSh4IDwgc2lnbmlmaWNhbmNlX2xldmVsLCBwYXN0ZSgiPCIsIHNpZ25pZmljYW5jZV9sZXZlbCksIHNwcmludGYoIiUuM2YiLCB4KSkKICAgIH0KICApCmBgYApUaGUgQ2hpLXNxdWFyZXMgc3RhdGlzdGljcyBjb21wdXRlZCBieSBDaGktc3F1YXJlZCB0ZXN0IGFuZCBMaWtlbGlob29kIHJhdGlvIHRlc3QgaXMgZGlmZmVyZW50IGJ1dCB0aGUgcC12YWx1ZSBpcyBsZXNzIHRoYW4gMC4wNSBpbiBib3RoIHRlc3QuIFRodXMgd2UgcmVqZWN0IHRoZSBudWxsIGh5cG90aGVzaXMgdW5kZXIgdGhlIDAuMDUgbGV2ZWwgc2luY2UgdGhlcmUgaGF2ZSAgc3Ryb25nIGV2aWRlbmNlIHRoYXQgZXhpc3Qgc2lnbmlmaWNhbnQgZGlmZmVyZW5jZSBpbiBwcm9iYWJpbGl0eSBpbiBDT1ZJRC0xOSBkZWF0aCBwcm9iYWJpbGl0eSBjb25kaXRpb24gb24geWVhcnMuCgpUaGVuIHdlIGNhbiBjb21wdXRlIHRoZSByZWxhdGl2ZSByaXNrIGFuZCBvZGRzIHJhdGlvIGZvciB5ZWFycyB0byBtZWFzdXJlIHRoZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHllYXJzIGFuZCBDT1ZJRC0xOSBkZWF0aCBwcm9wb3J0aW9uLiBXZSBjaG9zZSB0aGUgQ09WSUQtMTkgZGVhdGggcHJvcG9ydGlvbiBpbiAyMDIwIHllYXIgYXMgYmFzZWxpbmUgY2F0ZWdvcnkgYW5kIGNvbXB1dGUgdGhlIHJlbGF0aXZlIHJpc2tzIGFuZCBvZGRzIHJhdGlvcy4KCmBgYHtyfQojUmVsYXRpdmUgUmlzawpUYmw8LWFzLm1hdHJpeCh0YmxbLGMoMiwzKV0pClJSMjE9cm91bmQoVGJsWzIsMV0vVGJsWzEsMV0sNCkKUlIyMj1yb3VuZChUYmxbMywxXS9UYmxbMSwxXSw0KQpSUjIzPXJvdW5kKFRibFs0LDFdL1RibFsxLDFdLDQpClJSdGJsPC1kYXRhLmZyYW1lKCJSZWxhdGl2ZSByaXNrIixSUjIxLFJSMjIsUlIyMykKY29sbmFtZXMoUlJ0YmwpPC1jKCJZZWFyIiwgIjIwMjEiLCAiMjAyMiIsIjIwMjMiKQpSUnRibCU+JWd0KCklPiV0YWJfaGVhZGVyKAogICAgdGl0bGUgPSAiVGFibGUgMy4xLjQ6IFJlbGF0aXZlIHJpc2tzIGZvciB0aHJlZSB5ZWFycyIpCmBgYApUYWJsZSAzLjEuNCBzaG93ZWQgdGhlIFJlbGF0aXZlIHJpc2tzIGluIDIwMjEsMjAyMiBhbmQgMjAyMy4gV2UgY2FuIHNlZSB0aGF0IHJlbGF0aXZlIHJpc2tzIGluIDIwMjEsYW5kIDIwMjMgYXJlIGxlc3MgdGhhbiAxLCB3ZSBjYW4gY29uY2x1ZGVkIHRoYXQgaWYgYSBwZW9wbGUgZGllZCBpbiBDT1ZJRC0xOSwgdGhpcyBwZW9wbGUgaXMgbW9yZSBsaWtlbHkgZGllZCBpbiAyMDIwIHRoYW4gMjAyMSBhbmQgMjAyMy4gVGhlIHJlbGF0aXZlIHJpc2sgaW4gMjAyMiBhcmUgZ3JlYXRlciB0aGFuIDEsIHdlIGNhbiBjb25jbHVkZWQgdGhhdCBpZiBhIHBlb3BsZSBkaWVkIGluIENPVklELTE5LCB0aGlzIHBlb3BsZSBpcyBtb3JlIGxpa2VseSBkaWVkIGluIDIwMjIgdGhhbiAyMDIwLgoKYGBge3J9CiNPZGRzIHJhdGlvcwpUYmw8LWFzLm1hdHJpeCh0YmxbLGMoMiwzKV0pCk9SMjE9VGJsWzEsMV0qVGJsWzIsMl0vKFRibFsxLDJdKlRibFsyLDFdKQpPUjIyPVRibFsxLDFdKlRibFszLDJdLyhUYmxbMSwyXSpUYmxbMywxXSkKT1IyMz1UYmxbMSwxXSpUYmxbNCwyXS8oVGJsWzEsMl0qVGJsWzQsMV0pCk9SdGJsPC1kYXRhLmZyYW1lKCJPZGRzIFJhdGlvIixPUjIxLE9SMjIsT1IyMykKY29sbmFtZXMoT1J0YmwpPC1jKCJZZWFyIiwgIjIwMjEiLCAiMjAyMiIsIjIwMjMiKQpPUnRibCU+JWd0KCklPiV0YWJfaGVhZGVyKAogICAgdGl0bGUgPSAiVGFibGUgMy4xLjU6IE9kZHMgcmF0aW8gZm9yIHRocmVlIHllYXJzIikKYGBgCkZyb20gVGFibGUgMy4xLjUsIHdlIGNhbiBzZWUgdGhhdCB0aGUgb2RkcyByYXRpb3MgZm9yIGFsbCB0aHJlZSB5ZWFycyBhcmUgbm90IGVxdWFsIHRvIDEsIHdoaWNoIGluZGljYXRlZCB0aGF0IHRoZXJlIGV4aXN0cyBhc3NvY2lhdGlvbiBiZXR3ZWVuIHllYXIgYW5kIENPVklELTE5IGRlYXRoIHByb3BvcnRpb24uIEZvciBvZGRzIHJhdGlvcyBpbiAyMDIxIGFuZCAyMDIzLCB0aGVyZSBleGlzdCBwb3NpdGl2ZSBhc3NvY2lhdGlvbiBiZXR3ZWVuIHByb2JhYmlsaXR5IG9mIGRlYXRoIGNhdXNlZCBieSBDT1ZJRC0xOS4gVGhlIGFzc29jaWF0aW9uIGluIDIwMjIgaXMgbmVnYXRpdmUgYmV0d2VlbiBwcm9wb3J0aW9uIG9mIENPVklELTE5IGRlYXRoIGluIHRvdGFsIGRlYXRoLiAgIAoKIyMgU2VjdGlvbiAyOiBMb25nLXRlcm0gSW1wYWN0CgojIyBTZWN0aW9uIDM6IFByZXZhbGVuY2UgTW9kZWxpbmcKCiMgRGlzY3Vzc2lvbgoKIyMgU2VjdGlvbiAxOiBNb3J0YWxpdHkKCiMjIFNlY3Rpb24gMjogTG9uZy10ZXJtIEltcGFjdAoKIyMgU2VjdGlvbiAzOiBQcmV2YWxlbmNlIE1vZGVsaW5nCgojIENvbmNsdXNpb24KCiMgUmVmZXJlbmNlcwo=